package cn.wuxun.pic.service;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

import javax.imageio.ImageIO;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import cn.wuxun.common.utils.UploadUtil;
import cn.wuxun.common.vo.PicUploadResult;


@Service
public class PicService {
	
	@Value("${pic.pathPrefix}") 
	public String pathPrefix;
	@Value("${pic.urlPrefix}")
	public String urlPrefix;
	
	/**
	 * 
	 * @param MultipartFile pic
	 * @return PicUploadResult对象的json,结构是:
	 *					String url 生成的访问图片路径
	 *					Integer error 上传成功和失败的标志 0表示无错误 1表示有错误
	 */
	
	public PicUploadResult picUpload(MultipartFile pic) {
		PicUploadResult result=new PicUploadResult();
		
		//1.判断路径是否合法
		String originalName=pic.getOriginalFilename();
		String suffixName=originalName.substring(originalName.lastIndexOf("."));
		boolean bool=suffixName.matches(".(jpg|png|gif|JPG|PNG|GIF)");
		if(!bool){
			result.setError(1);
			return result;
		}
		
		
		//2.创建upload开始的一个路径(为存储图片和返回的url（访问图片的地址）做准备)
			//判断木马
		try {
			BufferedImage bufImage=ImageIO.read(pic.getInputStream());
			bufImage.getHeight();
			bufImage.getWidth();
		} catch (IOException e) {
			
			e.printStackTrace();
			result.setError(1);
			return result;
		}
			//引入工具类UploadUtil生成图片路径,  根据文件名称,生成hash字符串, 截取前8位只要图片名称不变生成的路径不变  
		String dir="/"+UploadUtil.getUploadPath(originalName, "upload")+"/";
		
		
		//3.创建目录的地址(存储地址)  d://upload/+dir
		String dirPath=pathPrefix+dir;
			//创建目录
		File file=new File(dirPath);
		if(!file.exists()){
			file.mkdirs();
		}
		
		
		//4.创建url访问地址   http://image.jt.com/+dir
		String urlPath=urlPrefix+dir;
		
		//5.拼接图片名称，输出到磁盘
			//将图片重命名 uuid表示图片存储访问的名称
		String fileName=UUID.randomUUID().toString()+suffixName;
			//磁盘输出图片
		String filePath=dirPath+fileName;
		try {
			pic.transferTo(new File(filePath));
		}  catch (Exception e) {
			
			e.printStackTrace();
			result.setError(1);
			return result;
		}
		
		
		//6.返回url  
		String picUrl=urlPath+fileName;
		result.setUrl(picUrl);
		return result;
		
		
	}	

}
